Concerns are particular concepts, pieces of functionality, or shared interests. In software, some concerns (termed crosscutting concerns) affect multiple modules, classes, and such. Crosscutting concerns typically result in programs that are harder to design, debug, implement, and modify. These problems are commonly due to issues referred to as tangling (multiple concerns in one module) or scattering (one concern spanning multiple modules). Separating concerns in software development is an abstraction mechanism used to provide cleaner views of relationships and common functionality between modules. For example, concerns may be separated based on common functionality or modules with narrow interfaces. A new programming element, called an aspect, was developed to provide encapsulation of an individual concern. Conventional object-oriented programming languages are beginning to incorporate aspect-oriented programming components.